from applications.extensions import db
from datetime import datetime

class Task(db.base_model):
    __tablename__ = 'tasks'
    
    # id = db.Column(db.Integer, primary_key=True)  # 基类包含
    title = db.Column(db.String(100), nullable=False, comment='任务标题')
    description = db.Column(db.Text, nullable=True, comment='任务描述')
    status = db.Column(db.SmallInteger, default=0, comment='任务状态')  # 0: 未开始 1: 进行中 2: 已完成
    priority = db.Column(db.SmallInteger, default=0, comment='优先级')  # 0: 低 1: 中 2: 高
    # created_at = db.Column(db.DateTime, default=datetime.utcnow)
    # updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
    due_date = db.Column(db.DateTime, nullable=True, comment='任务截止日期')
    
    ## 外键关联用户表（如果需要）
    # user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=True)  # 即使外键，不使用orm建立数据库层面的外键
    ## 建立 ORM 层面的关系（可选，但推荐）
    # user = db.relationship('User', backref=db.backref('task', lazy=True))
    
    def __repr__(self):
        return f'<Task {self.title}>'
    
    def to_dict(self):
        """将任务对象转换为字典"""
        return {
            'id': self.id,
            'title': self.title,
            'description': self.description,
            'status': self.status,
            'priority': self.priority,
            'created_at': self.created_at.isoformat() if self.created_at else None,
            'updated_at': self.updated_at.isoformat() if self.updated_at else None,
            'due_date': self.due_date.isoformat() if self.due_date else None,
            'user_id': self.user_id
        }
    
    @classmethod
    def from_dict(cls, data):
        """从字典创建任务对象"""
        task = cls()
        for field in ['title', 'description', 'status', 'priority', 'due_date', 'user_id']:
            if field in data:
                setattr(task, field, data[field])
        return task